home *** CD-ROM | disk | FTP | other *** search
/ Dr. Windows 3 / dr win3.zip / dr win3 / WINPROGS / UPC12BS2.ZIP / TEST / TESTULIB.C < prev    next >
C/C++ Source or Header  |  1992-12-30  |  15KB  |  545 lines

  1. /*--------------------------------------------------------------------*/
  2. /*          Program:    ulibtest.c           28 Nov 1992              */
  3. /*          Author:     Andrew H. Derbyshire                          */
  4. /*                      Kendra Electronic Wonderworks                 */
  5. /*                      P.O. Box 132                                  */
  6. /*                      Arlington, MA 02174-0002 USA                  */
  7. /*          Internet:   help@kew.com                                  */
  8. /*          Function:   Driver program for testing UUPC/extended      */
  9. /*                      ULIB communications packages                  */
  10. /*--------------------------------------------------------------------*/
  11.  
  12. /*--------------------------------------------------------------------*/
  13. /*       Copyright (c) 1992 by Kendra Electronic Wonderworks;         */
  14. /*       all rights reserved except those explicitly granted          */
  15. /*       through the UUPC/extended license.                           */
  16. /*--------------------------------------------------------------------*/
  17.  
  18. /*
  19.  *    $Id: TESTULIB.C 1.2 1992/12/30 12:26:32 plummer Exp $
  20.  *
  21.  *    $Log: TESTULIB.C $
  22.  * Revision 1.2  1992/12/30  12:26:32  plummer
  23.  * Report errors
  24.  *
  25.  * Revision 1.1  1992/11/29  22:09:10  ahd
  26.  * Initial revision
  27.  *
  28.  */
  29.  
  30. /*--------------------------------------------------------------------*/
  31. /*                        System include files                        */
  32. /*--------------------------------------------------------------------*/
  33.  
  34. #include <stdio.h>
  35. #include <io.h>
  36. #include <string.h>
  37. #include <ctype.h>
  38. #include <stdlib.h>
  39. #include <signal.h>
  40.  
  41. /*--------------------------------------------------------------------*/
  42. /*                    UUPC/extended include files                     */
  43. /*--------------------------------------------------------------------*/
  44.  
  45. #include "lib.h"
  46. #include "hlib.h"
  47. #include "ulib.h"
  48. #include "catcher.h"
  49. #include "timestmp.h"
  50. #include "comm.h"
  51.  
  52. /*--------------------------------------------------------------------*/
  53. /*                          Global variables                          */
  54. /*--------------------------------------------------------------------*/
  55.  
  56. static char text[] =
  57. "Only the first letter of each command is examined; operands are\n"
  58. "are seperated by white space.  Defaults for commands are in\n"
  59. "parentheses.  Commands may be issued out of sequence, in which case\n"
  60. "the results are unpredictable.\n\n"
  61. "open [port [speed [direct]]]\t(COM1, 2400, and 0 (modem))\n"
  62. "close\n"
  63. "send [text]\t\t\t(this help text)\n"
  64. "Send [file]\t\t\t(console input)\n"
  65. "receive [timeout]\t\t(5 seconds for up to 512 characters)\n"
  66. "Receive [timeout] [file]\t(5 seconds, received.dat)\n"
  67. "hangup\n"
  68. "?\n"
  69. "debuglevel (4)\n"
  70. "quit\n";
  71.  
  72. static int opened = 0;
  73.  
  74. currentfile();
  75.  
  76. /*--------------------------------------------------------------------*/
  77. /*    h e l p                                                         */
  78. /*                                                                    */
  79. /*    Print help text                                                 */
  80. /*--------------------------------------------------------------------*/
  81.  
  82. static void help( void )
  83. {
  84.    puts(text);
  85. }
  86.  
  87.  
  88. int CheckErrors( void )
  89. {
  90.    int far *stats;
  91.  
  92.    stats = com_errors();
  93.  
  94.    if( stats[COM_EOVFLOW] ) return( TRUE );
  95.    if( stats[COM_EOVRUN] ) return( TRUE );
  96.    if( stats[COM_EBREAK] ) return( TRUE );
  97.    if( stats[COM_EFRAME] ) return( TRUE );
  98.    if( stats[COM_EPARITY] ) return( TRUE );
  99.    if( stats[COM_EXMIT] ) return( TRUE );
  100.    if( stats[COM_EDSR] ) return( TRUE );
  101.    if( stats[COM_ECTS] ) return( TRUE );
  102.    return( FALSE );
  103. }
  104.  
  105.  
  106. void PrintErrors( void )
  107. {
  108.    int far *stats;
  109.  
  110.    stats = com_errors();
  111.  
  112.    printmsg(3, "Buffer overflows: %-4d", stats[COM_EOVFLOW]);
  113.    printmsg(3, "Receive overruns: %-4d", stats[COM_EOVRUN]);
  114.    printmsg(3, "Break characters: %-4d", stats[COM_EBREAK]);
  115.    printmsg(3, "Framing errors:   %-4d", stats[COM_EFRAME]);
  116.    printmsg(3, "Parity errors:    %-4d", stats[COM_EPARITY]);
  117.    printmsg(3, "Transmit errors:  %-4d", stats[COM_EXMIT]);
  118.    printmsg(3, "DSR errors:       %-4d", stats[COM_EDSR]);
  119.    printmsg(3, "CTS errors:       %-4d", stats[COM_ECTS]);
  120. }
  121.  
  122.  
  123.  
  124. /*--------------------------------------------------------------------*/
  125. /*    o p e n i t                                                     */
  126. /*                                                                    */
  127. /*    Open communications port                                        */
  128. /*--------------------------------------------------------------------*/
  129.  
  130. static void openit( char *buf )
  131. {
  132.    char *token,
  133.         *port = "COM1";
  134.     BPS speed = 2400;
  135.     int direct = 0;
  136.  
  137.    token  = strtok( buf , WHITESPACE );
  138.    if ( token != NULL )
  139.    {
  140.       port = token;
  141.       token  = strtok( NULL , WHITESPACE );
  142.    }
  143.  
  144.    if ( token != NULL )
  145.    {
  146.       speed = atoi(token);
  147.       token  = strtok( NULL , WHITESPACE );
  148.    }
  149.  
  150.    if ( token != NULL )
  151.       direct = atoi(token);
  152.  
  153.    strupr( port );
  154.    printf("openline( %s, %d, %d ) -- ", port, speed, direct );
  155.    if ( CheckErrors() ) PrintErrors();
  156.   if ( openline( port, speed,  direct))
  157.       printf("failed\n");
  158.    else {
  159.       printf("succeeded\n");
  160.       opened = 1;
  161.    }
  162.    if ( CheckErrors() ) PrintErrors();
  163. } /* openit */
  164.  
  165. /*--------------------------------------------------------------------*/
  166. /*    s e n d i t                                                     */
  167. /*                                                                    */
  168. /*    Send text to communications port                                */
  169. /*--------------------------------------------------------------------*/
  170.  
  171. static void sendit( char *buf )
  172. {
  173.    char *first = buf;
  174.    int len;
  175.  
  176.    if ( ! opened )
  177.    {
  178.       puts("Port isn't open ... issue o command first");
  179.       return;
  180.    }
  181.  
  182.    while( (first != NULL ) && *first && ! isprint(*first))
  183.       first++;
  184.  
  185.    if (( first == NULL ) || ! (*first))
  186.       first = text;
  187.    else
  188.       strcat( first, "\r\n" );
  189.  
  190.    len = strlen( first );
  191.    printf( "swrite( <text>, %d) -- ", len );
  192.    len = swrite( first, len );
  193.    printf("%d characters written\n", len);
  194.    if ( CheckErrors() ) PrintErrors();
  195.  
  196. } /* sendit */
  197.  
  198. /*--------------------------------------------------------------------*/
  199. /*    r e c v e i v e i t                                             */
  200. /*                                                                    */
  201. /*    Receive data to console from serial port                        */
  202. /*--------------------------------------------------------------------*/
  203.  
  204. static void receiveit( char *buf )
  205. {
  206.  
  207.    char *token;
  208.    int timeout = 5;
  209.    int len = 512;
  210.    int actual = 0;
  211.  
  212.    if ( ! opened )
  213.    {
  214.       puts("Port isn't open ... issue o command first");
  215.       return;
  216.    }
  217.  
  218.    token  = strtok( buf , WHITESPACE );
  219.    if ( token != NULL )
  220.    {
  221.       timeout = atoi( token );
  222.       token  = strtok( NULL , WHITESPACE );
  223.    }
  224.  
  225.    if ( token != NULL )
  226.       len = atoi( token );
  227.  
  228.    token = malloc( len + 1 );
  229.  
  230.    while( (actual < len))
  231.    {
  232.       if ( actual )
  233.          len = actual;
  234.       printf("sread( <buffer>,  %d, %d ) -- ", len, timeout );
  235.       actual = sread( token, len, timeout );
  236.       printf( "%d characters available\n", actual);
  237.       if ( CheckErrors() ) PrintErrors();
  238.       timeout = 0;
  239.  
  240.       if ( terminate_processing )
  241.          return;
  242.  
  243.       if ( !actual )
  244.          break;
  245.    }
  246.  
  247.    if ( actual )
  248.    {
  249.       token[actual] = '\0';
  250.       puts(token);
  251.    } /* if */
  252.  
  253.    free( token );
  254.  
  255. } /* receiveit */
  256.  
  257. /*--------------------------------------------------------------------*/
  258. /*    s e n d f i l e                                                 */
  259. /*                                                                    */
  260. /*    Send text to communications port from file                      */
  261. /*--------------------------------------------------------------------*/
  262.  
  263.